home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
ARGONET
/
PD
/
FILER
/
LINKFS.ZIP
/
!LinkFS
/
!RunImage
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1998-06-14
|
19KB
|
771 lines
*******************************************
** **
** !LinkFS **
** Version 1.13, 14th June 1998 **
** (C) Tom Hughes 1993 **
** **
*******************************************
** **
** This program is FREEWARE **
** Please see !Help file for details **
** **
*******************************************
error
wimp_poll(%1100000110000,0,0)
mess%,menu$()
memory(
mess%=
malloc(4)
!mess%=0
wimp_init("LinkFS", "!linkfs",
, 512, 310, mess%)
free(mess%)
transfer_init
temp_init
temp_readfile("<LinkFS$Dir>.Templates",300)
win_init(1)
!info%=
win_createfwin("info")
!!save%=
win_createfwin("save")
menu_init(1)
mainmenu%=0
menu$(2)
%#menu$(0)="Info":menu$(1)="Quit"
menu_makemenu("LinkFS", mainmenu%, menu$(), 1)
menu_subwindow(mainmenu%, 0, info%)
wimp_mainmenu
=mainmenu%
event_mouseclick(block%)
x%,y%,but%,win%,icon%,select%,menu%,adjust%,either%
/)x%=block%!0:y%=block%!4:but%=block%!8
00win%=
win_findwin(block%!12):icon%=block%!16
1/select%=((but%
4)=4):menu%=((but%
2)=2)
21adjust%=((but%
1)=1):either%=((but%
5)>0)
select%
win%=save%
icon%=1
transfer_startdrag(
icon_gettext(save%,0), &FC0, 0, save%, 1)
event_menuselection(block%)
!block%
wimp_quit
transfer_willload(type%,dataopen%)
flags%
"OS_File",17,
os_getstring(block%+44)
flags%
=(flags%
dataopen%
transfer_loadfile(file$,type%,safe%)
from$=file$
file$,".")
F! file$=
file$,
file$,".")+1)
icon_settext(save%, 0, file$)
win_openwin(save%)
transfer_savefile(file$,type%,safe%)
dummy%,buffer%
from$=file$
OU dummy%=
wimp_messagebox(
, "Error from LinkFS", "Can't overwrite link target!")
buffer%=
malloc(2+
(from$))
os_putstring(buffer%,from$+".")
"OS_File",10,file$,&FC0,,buffer%,buffer%+2+
(from$)
free(buffer%)
win_closewin(save%)
error
wimp_error(
$+" (internal error code "+
+")")
wimp_error(
$+" (internal error code "+
+")")
*|update
wimp_poll(M%,T%,P%):
*** update block ***
R%,I%,Q%
T%=0
&400C7,M%,_wimp_buffer%,,P%
&42
Q%:Q%=Q%+T%
&400E1,M%,_wimp_buffer%,Q%,P%
:I%=_wimp_buffer%
2 :
event_openwindow(I%)
3 :
event_closewindow(I%)
6 :
I%!12=-2
Q%=I%!8
l5
(Q%
event_iconbarmenu(!I%)
n&
event_mouseclick(I%)
7 :
_transfer_dragging%
q$
event_savedrag(I%)
8 :
"Wimp_ProcessKey",I%!24
9 :
event_menuselection(I%):
menu_keepopen
17,18:
_transfer_wantmess(I%!16)
v.
event_transfermessage(I%)
x&
event_message(I%)
19:
_transfer_wantack(I%!16)
{/
event_transferacknowledge(I%)
*|downdate
memory(Y%,S%)
P%,D%,A%,B%,C%,E%,F%,G%,H%,I%,J%,K%,L%,M%,N%,O%,Q%,R%,T%,U%,V%,Z%,X%,W%
copyright$,g%,h%,i%,l%,m%,n%,o%
Gcopyright$="Dynamic memory allocation routines,
Ian Palmer, 1993"
_mem_code% 559
0_mem_error%=Y%:_memdim%=S%:
&51
_mpsize%
&400EC,-1,-1
_mtop%:_mtop%+=&8000
Z%=0
2:P%=_mem_code%:[OPT Z%
!B A%:B B%:B C%:B D%:B R%:B W%
H.A%:ADR R4,_memory%:LDR R1,[R4]:.E%:CMP R1,#0:BEQ F%:LDR R2,[R1,#-4]
LCMP R2,R0:BGE G%:MOV R4,R1:LDR R1,[R1]:B E%:.F%:MOV R0,#0:ADR R1,_memrv%
ESTR R0,[R1]:MOV PC,R14:.G%:LDR R2,[R1]:STR R2,[R4]:ADR R0,_memrv%
STR R1,[R0]:MOV PC,R14
M.B%:LDR R5,[R0,#-4]:ADD R6,R5,R0:ADD R6,R6,#4:ADR R4,_memory%:LDR R1,[R4]
B.H%:CMP R1,#0:BEQ I%:LDR R2,[R1,#-4]:ADD R3,R2,R1:ADD R3,R3,#4
QCMP R3,R0:BEQ J%:CMP R6,R1:BEQ K%:CMP R1,R0:BGT I%:MOV R4,R1:LDR R1,[R1]:B H%
B.I%:STR R0,[R4]:STR R1,[R0]:B L%:.J%:ADD R5,R5,R2:ADD R5,R5,#4
JSTR R5,[R1,#-4]:MOV R0,R1:LDR R1,[R1]:CMP R6,R1:BNE L%:LDR R2,[R1,#-4]
I.K%:ADD R5,R5,R2:ADD R5,R5,#4:STR R5,[R0,#-4]:LDR R1,[R1]:STR R1,[R0]
9STR R0,[R4]:.L%:ADR R1,_memrv%:STR R0,[R1]:MOV PC,R14
I.C%:ADR R1,_memory%:.M%:LDR R2,[R1]:CMP R2,#0:BEQ N%:CMP R2,R0:BEQ O%
NMOVLT R1,R2:BLT M%:.N%:MOV R1,#0:.O%:ADR R0,_memrv%:STR R1,[R0]:MOV PC,R14
H.R%:ADR R4,_memory%:LDR R2,[R4]:.T%:CMP R2,#0:BEQ U%:LDR R3,[R2,#-4]
JADD R3,R3,R2:CMP R3,R0:BEQ V%:MOV R4,R2:LDR R2,[R2]:B T%:.U%:MOV R2,#0
I.V%:ADR R1,_memrv%:STR R2,[R1]:ADR R1,_memrv2%:STR R4,[R1]:MOV PC,R14
B.W%:ADR R1,_memory%:MOV R0,#0:LDR R2,[R1]:.Y%:CMP R2,#0:BEQ S%
1LDR R3,[R2,#-4]:ADD R0,R0,R3:LDR R2,[R2]:B Y%
-.S%:ADR R1,_memrv%:STR R0,[R1]:MOV PC,R14
B.D%:STMFD R13!,{R8-R10,R14}:CMP R0,#0:LDMEQFD R13!,{R8-R10,PC}
-CMP R1,R2:LDMEQFD R13!,{R8-R10,PC}:BLT l%
H.g%:SUBS R0,R0,#32:BLT h%:LDMIA R1!,{R3-R10}:STMIA R2!,{R3-R10}:B g%
Q.h%:ADDS R0,R0,#32:.i%:LDMEQFD R13!,{R8-R10,PC}:LDR R4,[R1],#4:STR R4,[R2],#4
SUBS R0,R0,#4:B i%
!.l%:ADD R1,R1,R0:ADD R2,R2,R0
H.m%:SUBS R0,R0,#32:BLT n%:LDMDB R1!,{R3-R10}:STMDB R2!,{R3-R10}:B m%
D.n%:ADDS R0,R0,#32:.o%:LDMEQFD R13!,{R8-R10,PC}:LDR R4,[R1,#-4]!
'STR R4,[R2,#-4]!:SUBS R0,R0,#4:B o%
._memory% EQUD 0
._memrv% EQUD 0
._memrv2% EQUD 0
_more_memory(S%)
M%,L%,A%,X%,Y%,Z%:M%=0
_memdim%
M A%=
_mem_code%+16:L%=!_memrv%:
L%<>0
S%-=!(L%-4)-4:!!_memrv2%=!L%
S%<(
-2048)
M% S%-1:!M%=S%-4:
L%<>0
M%=L%-4:!M%=S%+!(L%-4)
T A%=_mtop%:
_mem_code%+16:L%=!_memrv%:
L%<>0
S%-=!(L%-4)-4:!(!_memrv2%)=!L%
&400EC,-1,-1
X%,Y%,Z%:
S%<Z%
k
&400EC,X%+S%,Y%
Z%:M%=X%+&8000:!M%=Z%-X%-4:_mtop%=Z%+&8000:
L%<>0
M%=L%-4:!M%=Z%-X%+!(L%-4)
M%<>0
M%+=4
_less_memory
A%,B%,L%,C%,S%,N%,D%
A%=_mtop%:
_mem_code%+16
+B%=!_memrv%:C%=!_memrv2%:B%-=4:L%=4+!B%
;D%=(L%
_mpsize%)*_mpsize%:N%=L%-D%:S%=_mtop%-D%-&8000
&400EC,S%,-1
S%:_mtop%=S%+&8000
N%>7
!B%=N%-4:
!C%=0
malloc(A%)
M%,S%
-S%=A%:A%=12+(A%
16)*16:
A%<S%
A%+=16
_mem_code%:M%=!_memrv%
M%=0
M%=
_more_memory(A%+4)
M%<>0
S%=!(M%-4):
S%-A%>15
!(M%-4)=A%:
add_free(M%+A%,S%-A%)
M%=0
_mem_error%
11,"Can't allocate memory"
wimp_init(T$,I$,L%,S%,V%,H%)
B%,C%,X%,Y%,M%:
S%=0
S%=512:
S%<256 S%=256
S_wimp_task$=T$:_wimp_buffer%=
malloc(S%):B%=
malloc(38+
(I$)):_wimp_iconbar%=B%
&400C0,V%,&4B534154,T$,H%
_wimp_version%,_wimp_handle%
I$<>""
&400E9,40,,I$
,,,X%,Y%,,M%
&35,M%,4
,,C%:X%=X%<<C%
&35,M%,5
,,C%:Y%=Y%<<C%
!B%=-2:
!B%=-1
= B%!4=0:B%!8=0:B%!12=X%:B%!16=Y%:B%!20=&2102:B%!24=B%+36
C $(B%+36)=I$:B%!28=1:B%!32=
(I$)+1:
&400C2,,B%
_wimp_icon%
free(A%)
_mem_code%+4:L%=!_memrv%
(L%+!(L%-4))=_mtop%
(4+!(L%-4))>=_mpsize%
_less_memory
*|update
transfer_init
_transfer_type%=0
_transfer_file$=""
_transfer_size%=0
_transfer_ref%=0
_transfer_dragging%=
_wimp_buffer%!0=1
_wimp_buffer%!4=2
_wimp_buffer%!8=3
_wimp_buffer%!12=5
_wimp_buffer%!16=6
_wimp_buffer%!20=7
_wimp_buffer%!24=&80142
_wimp_buffer%!28=&80144
_wimp_buffer%!32=&80145
_wimp_buffer%!36=0
wimp_addmessages(_wimp_buffer%)
_transfer_wantmess(mess%)
mess%
1,2,3,5,6,&80144,&80145: =
event_transfermessage(block%)
buffer%,size%,mess%
?(block%+!block%)=0
block%!16
F
transfer_willload(block%!40,
block%!8<>_transfer_ref%
1
os_putstring(block%+44,"<Wimp$Scrap>")
block%!36=-1
block%!12=block%!8
block%!16=2
!block%=60
2
"Wimp_SendMessage",17,block%,block%!4
$
block%!12=_transfer_ref%
# block%!36=_transfer_size%
block%!12=block%!8
block%!16=3
=
"Wimp_SendMessage",18,block%,block%!20,block%!24
V
transfer_savefile(
os_getstring(block%+44),_transfer_type%,(block%!36<>-1))
! _transfer_ref%=block%!8
menu_remove
E
block%!4<>_wimp_handle%
transfer_willload(block%!40,
block%!12=block%!8
block%!16=4
2
"Wimp_SendMessage",17,block%,block%!4
i
transfer_loadfile(
os_getstring(block%+44),block%!40,
os_getstring(block%+44)<>"<Wimp$Scrap>")
+
transfer_willload(block%!40,
block%!12=block%!8
block%!16=4
2
"Wimp_SendMessage",17,block%,block%!4
B
transfer_loadfile(
os_getstring(block%+44),block%!40,
!
&80145:
block%!12
$
_transfer_wantack(mess%)
mess%
3,7,&80142: =
event_transferacknowledge(block%)
dummy%
block%!16
3#
block%!8=_transfer_ref%
45
os_getstring(block%+44)="<Wimp$Scrap>"
5-
"OS_CLI","Remove <Wimp$Scrap>"
7d dummy%=
wimp_messagebox(
,"Error from "+_wimp_task$,"Data transfer failed: Receiver died")
8
event_savedrag(block%)
flag%
_wimp_version%>=300
"OS_Byte",161,28
,,flag%
flag%=((flag%
2) = 2)
flag%=
flag%
"DragASprite_Stop"
"Wimp_DragBox",,-1
_transfer_dragging%=
_transfer_file$,".")
K? _transfer_file$=
_transfer_file$,
_transfer_file$,".")+1)
"Wimp_GetPointerInfo",,_wimp_buffer%
NG_wimp_buffer%!20=_wimp_buffer%!12:_wimp_buffer%!24=_wimp_buffer%!16
OD_wimp_buffer%!28=!_wimp_buffer%:_wimp_buffer%!32=_wimp_buffer%!4
P$_wimp_buffer%!36=_transfer_size%
Q$_wimp_buffer%!40=_transfer_type%
os_putstring(_wimp_buffer%+44,_transfer_file$)
S)_wimp_buffer%!12=0:_wimp_buffer%!16=1
T4!_wimp_buffer%=44+4*((
(_transfer_file$)+4)
"Wimp_SendMessage",18,_wimp_buffer%,_wimp_buffer%!20,_wimp_buffer%!24
V"_transfer_ref%=_wimp_buffer%!8
*|downdate
temp_init
_temp_list%=0
_temp_spritearea%=0
_temp_fonts%=
malloc(256)
I%=0
255:_temp_fonts%?I%=0:
temp_readfile(F$,E%)
C%,A%,D%,N%,T%,F%,Z%,H%,I%
C%=0
wimp_error(1,214,"Can't open template file "+F$)
A%=0
15:D%=
:T%=0:Z%=
malloc(E%)
A%=0
23:Z%?A%=
!Z%
h+ N%=
malloc(32):!N%=T%:T%=N%:N%!4=Z%!4
A%=0
11:F%=?(Z%+12+A%):
F%=0
?(Z%+A%+12)=13
:?(Z%+24)=13:$(N%+16)=
tolower($(Z%+12))
!Z%=0:
D%=T%:A%=Z%
malloc(256)
&400D9,,F$
I%=0
255:H%?I%=0:
N%=
malloc(D%!4):D%!8=N%
&400DB,,N%,A%,A%+E%,H%,$(D%+16),0
,,C%:F%=4+C%-A%
tB C%=
malloc(F%):D%!12=C%:
&400DB,,N%,C%,C%+F%,H%,$(D%+16),0
!D%=0
!D%=_temp_list%:_temp_list%=T%:D%=0:
D%=!D%
I%=0
w$
H%?I%
_temp_fonts%?I%+=1
_temp_spritearea%
N%!64=_temp_spritearea%
I%=N%!84
I%>0
}+
(!(N%+104+32*I%)
&103)=&102
~- !(N%+112+32*I%)=_temp_spritearea%
I%-=1
&400DA:
free(Z%)
free(H%)
win_init(E%)
4_win_list%=
malloc(4*E%):E%=
size_of(_win_list%)
A%=0
E%-1
4:!(_win_list%+A%)=0:
win_createfwin(N$)
win_fakewin(
temp_gettemplate(N$))
win_createwin(D%)
menu_init(N%)
;menu_tick=1:menu_dotted=2:_wimp_menu%=
malloc((N%+1)*4)
2_wimp_oldmenu%=0:_wimp_oldmx%=0:_wimp_oldmy%=0
7!_wimp_menu%=N%:
A%=1
N%:!(_wimp_menu%+4*A%)=0:
menu_makemenu(T$,N%,opts$(),S%)
XX%,TC%,A%,B%,C%,P%,M%,menu%,M$
#N%+=1:menu%=!(_wimp_menu%+N%*4)
menu%=0
; menu%=
malloc(32+24*(S%+1)):!(_wimp_menu%+N%*4)=menu%
size_of(menu%)<(32+24*(S%+1))
realloc(menu%,32+24*(S%+1)):!(_wimp_menu%+N%*4)=menu%
+$menu%=T$:menu%?
(T$)=0:menu%!12=&70207
0menu%!16=172:menu%!20=44:menu%!24=0:M%=
A%=0
S%:M$=opts$(A%):B%=0:C%=-1:P%=menu%+28+A%*24:TC%=7:XX%=&21
M$)="@"
B%=B%
8:M$=
M$):TC%=3:XX%=&400021
M$)="/"
B%=B%
1:M$=
M$)="_"
B%=B%
2:M$=
A%=S%
B%=B%
M$)="<"
E B%=B%
4:!P%=B%:P%!4=C%:P%!8=(TC%
&FF)*&1000000
&100
) M$=
M$):B%=
M$,">"):C%=
M$,B%+1))
5 M$=
M$,B%-1):$C%=M$:P%!12=C%:P%!16=-1:P%!20=255
M$)=">"
3 !P%=B%
16:P%!8=(TC%
&FF)*&1000000
B M$=
M$):B%=
M$,"<"):C%=
M$,B%+1)):C%=!(_wimp_menu%+4*C%)
( P%!4=C%:M$=
M$,B%-1):$(P%+12)=M$
6 !P%=B%:P%!4=C%:P%!8=(TC%
&FF)*&1000000
$ $(P%+12)=M$:?(P%+12+
(M$))=0
(M$)
:menu%!16=16*(M%+1)
menu_subwindow(M%,N%,S%)
P%:P%=!(_wimp_menu%+4*(M%+1)):!(P%+32+N%*24)=!(S%-8)
win_findwin(H%)
E%,A%,F%,P%
size_of(_win_list%):F%=-1:
A%=0
E%-1
4:P%=_win_list%!A%
P%<>0
!(P%-8)=H%
F%=P%
transfer_startdrag(file$,type%,size%,win%,icon%)
flag%,xmin%,xmax%,ymin%,ymax%,xsize%,ysize%,sprite$
$!_wimp_buffer%=
win_handle(win%)
"Wimp_GetWindowInfo",,_wimp_buffer%
8xmin%=_wimp_buffer%!4+!(_wimp_buffer%+92+32*icon%+0)
8xmax%=_wimp_buffer%!4+!(_wimp_buffer%+92+32*icon%+8)
[ymin%=_wimp_buffer%!8+!(_wimp_buffer%+92+32*icon%+4)+(_wimp_buffer%!16-_wimp_buffer%!8)
\ymax%=_wimp_buffer%!8+!(_wimp_buffer%+92+32*icon%+12)+(_wimp_buffer%!16-_wimp_buffer%!8)
os_screensize(xsize%,ysize%)
_wimp_version%>=300
"OS_Byte",161,28
,,flag%
flag%=((flag%
2) = 2)
flag%=
flag%
_wimp_buffer%!0=xmin%
_wimp_buffer%!4=ymin%
_wimp_buffer%!8=xmax%
_wimp_buffer%!12=ymax%
H sprite$="file_":
type%<&100 sprite$+="0":
type%<&10 sprite$+="0"
sprite$+=
~(type%)
"DragASprite_Start",%11000101,1,sprite$,_wimp_buffer%,0
!_wimp_buffer%=0
_wimp_buffer%!4=5
2 _wimp_buffer%!8=xmin%:_wimp_buffer%!12=ymin%
3 _wimp_buffer%!16=xmax%:_wimp_buffer%!20=ymax%
+ _wimp_buffer%!24=0:_wimp_buffer%!28=0
5 _wimp_buffer%!32=xsize%:_wimp_buffer%!36=ysize%
"Wimp_DragBox",,_wimp_buffer%
_transfer_type%=type%
_transfer_file$=file$
_transfer_size%=size%
_transfer_dragging%=
icon_gettext(W%,I%)
F!_wimp_buffer%=!(W%-8):_wimp_buffer%!4=I%:
&400CE,,_wimp_buffer%
(_wimp_buffer%!24
1)=0
(_wimp_buffer%!24
256)
os_getstring(_wimp_buffer%!28)
*|update
wimp_quit:
*** update block ***
I%=0
_temp_fonts%?I%
"Font_LoseFont",I%
&400DD,_wimp_handle%,&4B534154
*|downdate
os_getstring(P%)
S$:S$="":
?P%>31 S$+=
(?P%):P%+=1:
icon_settext(W%,I%,T$)
cw%,ci%,cx%,cy%,cp%
F!_wimp_buffer%=!(W%-8):_wimp_buffer%!4=I%:
&400CE,,_wimp_buffer%
(_wimp_buffer%!24
1)=0
(_wimp_buffer%!24
256)
os_putstring(_wimp_buffer%!28,
T$,_wimp_buffer%!36))
&400D3,,_wimp_buffer%+128
Ecw%=_wimp_buffer%!128:ci%=_wimp_buffer%!132:cx%=_wimp_buffer%!136
/cy%=_wimp_buffer%!140:cp%=_wimp_buffer%!148
cw%=W%!-8
ci%=I%
cp% >
(S$)
cp% =
&400D2,cw%,ci%,cx%,cy%,-1,cp%
(_wimp_buffer%!8=0:_wimp_buffer%!12=0
&400CD,,_wimp_buffer%
win_openwin(W%)
B%:B%=_wimp_buffer%:!B%=!(W%-8)
&400CB,,B%:
&400C5,,B%
wimp_messagebox(C%,T$,M$)
B%,R%,F%:B%=_wimp_buffer%:F%=17:
F%=19
$!B%=0:$(B%+4)=M$:?(B%+4+
(M$))=0
&400DF,B%,F%,T$
os_putstring(P%,S$)
$P%=S$:?(P%+
(S$))=0
win_closewin(W%)
3!_wimp_buffer%=!(W%-8):
&400C6,,_wimp_buffer%
wimp_error(F%,E%,M$)
B%,R%:B%=_wimp_buffer%
%%!B%=E%:$(B%+4)=M$:?(B%+4+
(M$))=0
&400DF,B%,1,_wimp_task$
wimp_quit
&400DF,B%,3,_wimp_task$
R%=2
wimp_quit
event_openwindow(I%)
&400C5,,I%
event_closewindow(I%)
&400C6,,I%
event_iconbarmenu(X%)
Y%,M%:
wimp_error(1,
$+" at line "+
:MM%=
wimp_mainmenu:Y%=96+
menu_menuheight(M%):X%-=16+(
menu_width(M%)
menu_popup(M%,X%,Y%)
menu_keepopen
_wimp_oldmenu%=-1
A*M%=!(_wimp_menu%+4*(_wimp_oldmenu%+1))
&400CF,,_wimp_buffer%
(_wimp_buffer%!8
&400D4,,M%,_wimp_oldmx%,_wimp_oldmy%
event_message(B%)
B%!16
0 :
wimp_quit
add_free(A%,L%)
O:L%=(L%
16)*16:
L%>0
!A%=L%-4:A%+=4:
_mem_code%+4
wimp_addmessages(M%)
"Wimp_AddMessages",M%
menu_remove
"Wimp_CreateMenu",,-1
tolower(S$)
R$,A%,C%,L%:L%=
(S$):R$="":
L%=0
A%=1
L%:C%=
S$,A%,1)):
C%>64
C%<91
C%+=32
(C%):
size_of(P%)
=!(P%-4)
win_fakewin(P%)
d>W%=
malloc(20):!W%=&76C0000:W%!4=0:W%!8=0:W%!12=0:W%!16=P%
=W%+16
temp_gettemplate(N$)
F%,P%:N$=
tolower(N$)
F%=0:P%=_temp_list%
$(P%+16)=N$
F%=P%!8
P%=!P%
win_createwin(D%)
W%,A%,E%,F%
!(D%-8)<>0
wimp_error(1,0,"Trying to create a window that's already there")
&400C1,,!D%
W%:!(D%-8)=W%
tME%=
size_of(_win_list%):F%=-1:
A%=0
E%-1
_win_list%!A%=0
F%=A%
F%=-1
realloc(_win_list%,E%+16):F%=E%:
A%=E%
E%+15
4:_win_list%!A%=0:
_win_list%!F%=D%
realloc(
P%,N%)
A%,B%,C%
P%=0
malloc(N%):
|8C%=!(P%-4):B%=N%:N%=12+(N%
16)*16:
N%<B%
N%+=16
N%<=C%
(C%-N%)>15
!(P%-4)=N%:
add_free(P%+N%,C%-N%)
L A%=P%+C%+4:
_mem_code%+8:B%=!_memrv%:A%=0:
B%<>0
B%=!B%:A%=!(B%-4)
B%<>0
C%+A%+4>=N%
% !!_memrv%=!B%:!(P%-4)=C%+A%+4
A%=C%:C%=
malloc(N%)
C%<>0
/ B%=P%:
_mem_code%+12:
free(P%):P%=C%
6
_mem_error%
11,"Can't allocate memory"
win_handle(W%)
=!(W%-8)
os_screensize(
F%,P%
&35,-1,4
,,F%:
&35,-1,11
,,P%:X%=P%<<F%
&35,-1,5
,,F%:
&35,-1,12
,,P%:Y%=P%<<F%
menu_menuheight(N%)
A%,H%,P%:N%+=1:P%=!(_wimp_menu%+4*N%):H%=0:A%=-1:
:A%+=1
*H%+=44:
(!(P%+A%*24+28)
H%+=22
(!(P%+A%*24+28)
128)
menu_width(N%)
P%:P%=!(_wimp_menu%+(N%+1)*4)
=P%!16
menu_popup(M%,X%,Y%)
P_wimp_oldmenu%=M%:_wimp_oldmx%=X%:_wimp_oldmy%=Y%:M%=!(_wimp_menu%+4*(M%+1))
&400D4,,M%,X%,Y%